Предыдущий раздел ОСНОВНЫЕ ОПЕРАТОРЫ АССЕМБЛЕРА Следующий раздел

1.2.3. Операторы передачи данных

Они осуществляют обмен данными между регистрами и ячейками памяти.

1)mov(переслать) пересылает содержимое второго операнда (слово или байт) в качестве содержимого первого операнда. Можно пересылать байт или слово между регистром и ячейкой памяти или между двумя регистрами. А также можно помещать непосредственное значение в регистр или в ячейку памяти. При пересылке непосредственного значения в ячейку памяти необходимо указать длину пересылаемого данного с помощью вспомогательного псевдооператора byte (байт) или word (слово). Примеры:

 

mov       ax, [Table]                   ; Пересылка из ячейки ОП в регистр

mov       [Table], ax                    ;   и наоборот

mov       bl, al                             ; Пересылка между регистрами

mov       cl, -30                           ; Загрузка константы в регистр

mov       [Mem], byte 25h            ;   или в ячейку ОП

 

Следует отметить, что с помощью данного оператора нельзя выполнять пересылку данных из одной ячейки ОП в другую ячейку ОП. Такая пересылка может быть осуществлена двумя операторами mov с использованием регистра общего назначения.

С помощью оператора mov можно загружать в регистр общего назначения (но не в регистр сегмента) номер начального параграфа сегмента, задав в качестве второго операнда имя сегмента. Например:

mov                  ax, Data_seg                 ;  Data_seg – имя сегмента данных

Для загрузки в регистр сегмента (кроме CS) номера начального параграфа сегмента требуются два оператора mov. Например:

 

mov   ax, Data_seg                           ;   Загрузка в AX 

mov   ds, ax                                      ;  Пересылка в регистр DS

 

Что касается регистра сегмента кода CS, то он не может быть использован в качестве первого операнда в операторе mov. Кроме того, нельзя пересылать содержимое одного регистра сегмента в другой. Такая пересылка может быть осуществлена  двумя операторами mov с использованием регистра общего назначения.

2)xchg (обменять) производит обмен содержимого двух регистров или регистра и ячейки ОП. Следующие два фрагмента программ делают одно и то же – меняют местами содержимое двух байтов в ОП – Opr1 и Opr2:

 

а)           mov   al, [Opr1]                      ;   (Opr1) ® AL

              mov   bl, [Opr2]                      ;   (Opr2) ® BL

               mov  [Opr2], al                      ;   (AL) ® Opr2

               mov  [Opr1], bl                      ;   (BL) ® Opr1

 

б)         mov   al, [Opr1]                      ;   (Opr1) ® AL

              xchg  al, [Opr2]                      ;   (Opr2) ® AL

              mov   [Opr1], al                      ;   (AL) ® Opr1

 

В варианте (б) потребовалось на один оператор и на один регистр меньше, чем в (а).

3) push (поместить слово в стек) помещает содержимое регистра или ячейки ОП размером в 16-битовое слово на вершину стека. Примеры:

 

push   ax                                  ;       (AX) à  стек

push   [Mem]                           ;      (Mem) à стек

 

4) pop (извлечь слово из стека) выбирает слово из вершины стека и помещает его в ячейку памяти или в регистр. Пример:

pop   ax                         ;   Слово из вершины стека àAX

5) lea(загрузить адрес) пересылает адрес-смещение ячейки памяти в любой 16-битовый регистр данных, регистр-указатель или индексный регистр. Оператор имеет два операнда. В качестве первого из них записывается  регистр, а в качестве второго - метка ячейки ОП. Пример:

   lea    bx, [Mem]                      ; Адрес-смещение ячейки Mem à BX   

    Следует заметить, что данный оператор можно заменить оператором:

mov   bx, Mem                        ; Адрес-смещение Mem àBX

 


Предыдущий раздел В начало Следующий раздел